const websocket = require("ws");
//定义websocket服务，设置端口号为8082
const wss = new websocket.Server({ port: 8082 });

function generateRandomChineseReply() {
  const characters =
    "的一是了不在人有我他这中大上个们到说国和为子你它时下以来上人为是地月日的也行高一发到的才给看水重子可以美情能心爱走走愿几天东种本气觉学问三爱对前想国学生书院";
  let randomReply = "";
  const length = Math.floor(Math.random() * 5) + 3; // 随机生成一个3到7个字的句子
  for (let i = 0; i < length; i++) {
    const randomIndex = Math.floor(Math.random() * characters.length);
    randomReply += characters[randomIndex];
  }
  return randomReply;
}
// 预设的关键词和对应的回复
const keywordReplies = {
  你好: "您好，我是您的医生助手。",
  胡聪本人男: "正在为您准备病历，请稍等。",
  再见: "再见，有问题随时找我哦！",
  "*": "抱歉，不太明白您的意思哦。",
  "？": "抱歉，不太明白您的意思哦。",
  "！": "抱歉，不太明白您的意思哦。",
};

// 处理文本消息
function handleTextMessage(text) {
  text = text;
  // 匹配预设关键词
  if (keywordReplies[text]) {
    return keywordReplies[text];
  } else {
    // 若没有匹配到关键词，返回随机回复
    return generateRandomChineseReply();
  }
}

//监听连接事件,ws为客户端连接实例对象
//触发时间：当客户端连接服务端时触发
wss.on("connection", (ws) => {
  //监听消息事件,触发时间：当客户端发送消息时触发
  ws.on("message", (message) => {
    let obj = JSON.parse(message);
    //发送消息,触发时间:当服务端发送消息时触发
    // 消息处理函数
    const cleanedMessage = obj.content;
    // 处理并响应消息
    const reply = handleTextMessage(cleanedMessage);
    // 随机回复+匹配关键词回复
    // ws.send(
    //   JSON.stringify({
    //     ...obj,
    //     type: "server",
    //     content: reply,
    //   })
    // );
    //固定回复
    ws.send(
      JSON.stringify({
        ...obj,
        type: "server",
        contents: "您的问题信息过少，建议继续补充 具体症状、患病时长、做过的体检、用药情况、想获得医生什么帮助等，【示例】您可以输入: 慢性肺炎，有两个月了该怎么办是否需要上传患处、检查、病例等图片，仅您与医生可见",
        datetime: new Date().toLocaleString(),
      })
    );
  });
  //监听关闭事件,触发时间：当客户端关闭连接时触发
  ws.on("close", () => {
    console.log("客户端关闭连接");
  });
  //监听错误事件,触发时间：当连接出错时触发
  ws.on("error", () => {
    console.log("连接出错");
  });
  //发送消息,触发时间:当服务端发送消息时触发
  ws.send(
    JSON.stringify({
      datetime: new Date().toLocaleString(),
      type: "server",
      contents:
        "您好，我是智能助手，请在下方输入框详细描述病情，以便医生准确了解您的情况，快速接诊",
      datetime: new Date().toLocaleString(),
    })
  );
});
